package ly.gupao.edu.thread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;

/**
 * @author: liyang
 * @date：2018/5/17 0017
 * describe：线程处理类
 */
public class ExecutorProcessPool {

    static ExecutorProcessPool pool = null;


    public static ExecutorProcessPool getFixedThreadPool(){
        if(pool == null){
            pool = new ExecutorProcessPool(ExecutorServiceFactory.createFixedThreadPool(50));
        }
        return pool;
    }

    private ExecutorService executor;
    private int threadMax = 10;

    private ExecutorProcessPool() {
    }

    public ExecutorProcessPool(ExecutorService executor){
        this.executor = executor;
    }

    public ExecutorProcessPool(ExecutorService executor, int threadMax) {
        this.executor = executor;
        this.threadMax = threadMax;
    }

    /**
     * 关闭线程池，这里要说明的是：调用关闭线程池方法后，线程池会执行完队列中的所有任务才退出
     *
     * @author SHANHY
     * @date   2015年12月4日
     */
    public void shutdown(){
        executor.shutdown();
    }

    /**
     * 提交任务到线程池，可以接收线程返回值
     *
     * @param task
     * @return
     * @author SHANHY
     * @date   2015年12月4日
     */
    public Future<?> submit(Runnable task) {
        return executor.submit(task);
    }

    /**
     * 提交任务到线程池，可以接收线程返回值
     *
     * @param task
     * @return
     * @author SHANHY
     * @date   2015年12月4日
     */
    public Future<?> submit(Callable<?> task) {
        return executor.submit(task);
    }

    /**
     * 直接提交任务到线程池，无返回值
     *
     * @param task
     * @author SHANHY
     * @date   2015年12月4日
     */
    public void execute(Runnable task){
        executor.execute(task);
    }

}
